function [EC, EC_rank] = EC_node()
% 特征向量中心性计算函数
% 输入:
%   B - 多层网络的邻接矩阵元胞数组
% 输出:
%   EC - 节点的特征向量中心性值

% 加载数据
load Xendata/B

% 聚合多层网络为单层网络
N = size(B{1,1}, 1);
L = size(B, 2);
A = zeros(N); % 聚集邻接矩阵
for layer = 1:L
    A = A + B{1,layer};
end

% 二值化处理(如果需要)
for i = 1:N
    for j = 1:N
        if A(i,j) ~= 0
            A(i,j) = 1;
        end
    end
end

% 计算特征向量中心性
% 1. 计算邻接矩阵的最大特征值对应的特征向量
[V, ~] = eigs(A, 1); % 获取最大特征值对应的特征向量

% 2. 特征向量中心性就是特征向量的绝对值(确保非负)
EC = abs(V);

% 3. 归一化处理(可选)
EC = EC / sum(EC);
% 创建排序结果
[sortedEC, indices] = sort(EC, 'descend');
EC_rank = [indices, sortedEC]; % 第一列是节点编号，第二列是中心性值

% 保存结果
save('Xenresults/EC_rank.mat',  'EC_rank');

% 保存结果
save('Xenresults/Eig_node.mat', 'EC');

% 如果需要排序输出可以取消下面的注释
% [sortedEC, indices] = sort(EC, 'descend');
% disp('Top 10 nodes by eigenvector centrality:');
% disp([indices(1:10), sortedEC(1:10)]);
end